//1.在app.js中创建服务器,创建路由器目录router,创建各个模块
//2,在user.js中创建路由器对象,添加用户注册的路由(post /),导出路由器,响应'注册成功',导出路由器对象
//3.在app.js中引入路由器user.js,并挂载,添加前缀/v1/users
//4.在app.js中引入body-parser中间件,将post请求的数据解析为对象
//5.在user.js路由中获取数据
//6.在连接池模式pool.js中引入mysql模块,创建连接池对象,导出连接池对象
//7.在user.js下引入pool.js,使用连接池执行SQL命令,将获取的数据插入到数据表cg_user中
//8.在user.js下添加用户登录的接口(post /login),获取传递到的数据,验证各项数据是否为空,执行SQL命令,如果查询到了用户名密码同时匹配的数据,响应登录成功,否则登录失败
//9.在user.js下添加修改用户的接口(put /编号),获取传递的数据,验证各项数据是否为空(uid email phone user_name gender),执行SQL命令,返回修改成功,删除失败


//引入express模块
const express = require('express');
//引入连接池模块
const pool = require('../pool.js');
//console.log(pool);
//创建路由器对象
const r = express.Router();

//根据uname查询用户信息
// action="http://127.0.0.1:3000/v1/ceshi/list"
r.get('/list/:uname',(req,res,next)=>{
  let obj=req.params;
  console.log(obj);
	pool.query("select * from cg_user where uname=?",[obj.uname],(err,result)=>{
		if(err){
      next(err);
      return
    };
    if(result.length===0){
		  res.send({code:201,msg:'查询失败'});
		}else{
		  res.send({code:200,msg:"查询成功",result:result});
      // console.log(result);
		}
	});
});

//注册路由
//http://127.0.0.1:8080/v1/users
//添加路由,用户注册(post /register)
r.post('/register',(req,res,next)=>{
	//获取post请求的数据
	let obj = req.body;
//判断用户名是否存在
//因为query是异步,所有要把send放到函数里面,否则先执行异步后面的语句
	pool.query('select uname from cg_user where uname=?',[obj.uname],(err,result)=>{
			if(err) {
				//如果出现错误交给下一个中间件
				next(err);
				//不能往后执行
				return;
			}
			if(result.length===0){
				pool.query('insert into cg_user set ?',[obj],(err,result)=>{
					if(err){
						next(err);
						return;
					}
					res.send({code:200,msg:'注册成功',result:result[0]});
				});
			}else{
				res.send({code:201,msg:'用户名已被注册'});
			}
	});
});

//登录路由
//添加路由,用户登录(uname,upwd)
r.post('/login',(req,res,next)=>{
//2.1
  //获取数据
  let obj = req.body;
//2.3
  //查询数据,执行SQL命令
	 pool.query('select * from cg_user where uname=? and upwd=?',[obj.uname,obj.upwd],(err,result)=>{
	   if(err){
		   next(err);
			 return;
	 }
		//console.log(result);
		//结果是数组,如果数组长度为0说明登录失败,否则登录成功
		if(result.length===0){
		  res.send({code:201,msg:'登录失败'});
		}else{
      res.send({code:200,msg:'登录成功',result:result[0]});
		}
	});
});

//上传个人头像图片
r.post('/upload/headImage', (req, res, next)=>{
  let form = new multiparty.Form();
  var path = require('path');
  form.uploadDir=path.resolve(__dirname,'../public/images');
  console.log(form.uploadDir);
  form.keepExtensions=true;   //是否保留后缀
  form.autoFiels=true;       //启用文件事件，并禁用部分文件事件，如果监听文件事件，则默认为true。
  form.parse(req,function(err,fields,files){  //其中fields表示你提交的表单数据对象，files表示你提交的文件对象
    if(err){
      res.json({
        code:201,
        msg:"上传失败！"+err
      });
    }else{
      res.json({ 
        code:200,
        msg:"上传成功！",
        personPicture: "http://localhost:3000"+files.file[0].path.split("public")[1]
      });
    }
  });  
  
});

//导出路由器对象
module.exports=r;

//错误提示:
//Cannot set headers after they are sent to the client
//提示:多个send被调用,响应了多次
//解决只能响应一次

